#include "peer.h"

Peer::Peer(QString endereco_ip, int num_ordem)
{
    this->socket = new QTcpSocket();
    socket->connectToHost(endereco_ip, 50000, QIODevice::ReadWrite);
    connect (this->socket, SIGNAL(readyRead()), this, SLOT(lerDados()));
    this->num_ordem = num_ordem;
    this->endereco_ip = endereco_ip;
    this->calculosProntos = false;
    this->transmissaoPronta = false;
    this->atraso = 0;
    this->banda_disponivel = 0;
}

void Peer::enviarMensagem(QString texto)
{
    QByteArray dados;
    dados.append(texto);
    this->socket->write(dados);
}

void Peer::lerDados()
{
    QByteArray dados;
    dados = this->socket->readAll();
    this->dados.append(dados);
    if (this->dados.contains(QByteArray("#fim#"))) {
        this->dados.replace(QByteArray("#fim#"), QByteArray(""));
        this->transmissaoPronta = true;
        emit this->transmissaoFinalizada();
    }
}

void Peer::calcularDadosRede()
{
    this->ping = new Ping(this->endereco_ip, 1, 10);
    connect(this->ping, SIGNAL(finished(int)), this, SLOT(iniciarCalculoVelocidade()));
    this->ping->start();
}

void Peer::iniciarCalculoVelocidade()
{
    this->atraso = this->ping->tempoMedio();
    delete this->ping;
    this->ping = new Ping (this->endereco_ip, 1, 5000);
    connect(this->ping, SIGNAL(finished(int)), this, SLOT(finalizarConta()));
    this->ping->start();
}

void Peer::finalizarConta()
{
    qDebug () << "Tempo do segundo ping: " << QString::number(this->ping->tempoMedio());
    float tempo = this->ping->tempoMedio() - this->atraso;
    if (tempo < 0)
        tempo = tempo * -1;
    else if (tempo == 0) {
        this->calcularDadosRede();
        return;
    }
    this->banda_disponivel = 5000/(tempo);
    this->calculosProntos = true;
    emit this->calculosRealizados();
}
